home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vdstd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  14KB  |  306 lines

  1. /*  VDstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type "double"
  5.   (real numbers)
  6.  
  7.   Copyright (c) 1996-1999 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VDSTD_H
  12. #define __VDSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17.  
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21.  
  22. /*************************  Generation  **************************/
  23.  
  24. dVector   __vf  VD_vector( ui size );
  25. dVector   __vf  VD_vector0( ui size );
  26.  
  27. /***************  Addressing single vector elements ******************/
  28.  
  29. double _VFAR * VD_Pelement( dVector X, ui n );
  30.       /* returns a pointer to the n'th element of X. For the memory model
  31.          HUGE, the pointer is normalized. */
  32. #define VD_element( X, n )  (*VD_Pelement( X, n ))
  33.  
  34. /*******************  Initialization **********************************/
  35.  
  36. void  __vf  VD_equ0( dVector X, ui size );
  37. void  __vf  VD_equ1( dVector X, ui size );
  38. void  __vf  VD_equC( dVector X, ui size, double C );
  39. void  __vf  VD_equV( dVector Y, dVector X, ui size );
  40. void  __vf  VDx_equV( dVector Y, dVector X, ui size, double A, double B );
  41. void  __vf  VD_ramp( dVector X, ui size, double Start, double Rise );
  42. void  __vf  VD_Parzen( dVector X, ui size );
  43. void  __vf  VD_Welch( dVector X, ui size );
  44. void  __vf  VD_Hanning( dVector X, ui size );
  45. void  __vf  VD_comb( dVector X, ui size, unsigned step, double C );
  46. long  __vf  VD_random( dVector X, ui size, long seed,
  47.                        double MinVal, double MaxVal );
  48. long  __vf  VD_noise( dVector X, ui size, long seed, double Amp );
  49.             /* VD_random and VD_noise return a new seed value.
  50.                random quality of VD_random is much better      */
  51.  
  52.  
  53. /***************  Data-type interconversions  *************************/
  54.        /* for rounding functions, see VDmath.h ! */
  55.  
  56. void  __vf   V_SItoD(  dVector Y, siVector X, ui size );
  57. void  __vf   V_ItoD(   dVector Y, iVector  X, ui size );
  58. void  __vf   V_LItoD(  dVector Y, liVector X, ui size );
  59. void  __vf   V_QItoD(  dVector Y, qiVector X, ui size );
  60.  
  61. void  __vf   V_UStoD(  dVector Y, usVector X, ui size );
  62. void  __vf   V_UtoD(   dVector Y, uVector  X, ui size );
  63. void  __vf   V_ULtoD(  dVector Y, ulVector X, ui size );
  64.  
  65. void  __vf   V_FtoD( dVector Y, fVector X, ui size );
  66. void  __vf   V_DtoF( fVector Y, dVector X, ui size );
  67. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  68.     void  __vf   V_DtoE( eVector Y, dVector X, ui size );
  69.     void  __vf   V_EtoD( dVector Y, eVector X, ui size );
  70. #else  /* no IEEE number support with Visual C++ */
  71.     #define V_DtoE VD_equV
  72.     #define V_EtoD VD_equV
  73. #endif
  74.  
  75.  
  76. /****************  Index-oriented manipulations ***********************/
  77.  
  78.  
  79. void  __vf  VD_reflect( dVector X, ui size );
  80. void  __vf  VD_rev( dVector Y, dVector X, ui size );
  81. #if defined (V_HUGE)
  82.     void  __vf  VD_rotate( dVector Y, dVector X, ui size, long pos );
  83. #else
  84.     void  __vf  VD_rotate( dVector Y, dVector X, ui size, int pos );
  85. #endif
  86. void  __vf  VD_delete( dVector X, ui size, ui pos );
  87. void  __vf  VD_insert( dVector X, ui size, ui pos, double C );
  88. void  __vf  VD_sort( dVector Y, dVector X, ui size, int dir );
  89. void  __vf  VD_sortind( uiVector Ind, dVector X, ui size, int dir );
  90. void  __vf  VD_subvector( dVector Y, ui sizey, dVector X, int step );
  91. void  __vf  VD_indpick( dVector Y, uiVector Ind, ui sizey, dVector X );
  92. void  __vf  VD_indput(  dVector Y, dVector X, uiVector Ind, ui sizex );
  93. void  __vf  VD_indpick( dVector Y, uiVector Ind, ui size, dVector X );
  94. ui    __vf  VD_searchC( dVector X, ui size, double C, int mode );
  95. void  __vf  VD_searchV( uiVector Ind, dVector X, ui sizex,
  96.                                      dVector Tab, ui sizetab, int mode );
  97.  
  98. void  __vf  VD_polyinterpol( dVector Y, dVector X, ui sizex,
  99.                         dVector XTab, dVector YTab, ui sizetab, unsigned deg );
  100. void  __vf  VD_ratinterpol( dVector Y, dVector X, ui sizex,
  101.                         dVector XTab, dVector YTab, ui sizetab, unsigned deg );
  102. void  __vf  VD_splinederiv2( dVector Y2, dVector XTab, dVector YTab,
  103.                             ui size, int specify, double Yp0, double Ypn );
  104. void  __vf  VD_splineinterpol( dVector Y, dVector X, ui sizex,
  105.                     dVector XTab, dVector YTab, dVector Y2Tab, ui sizetab );
  106.  
  107.  
  108. /***************** Functions of a sub-set of elements  ********************/
  109.  
  110. void  __vf  VD_subvector_equC(  dVector Y, ui subsiz, unsigned samp, double C );
  111. void  __vf  VD_subvector_equV(  dVector Y, ui subsiz, unsigned samp, dVector X );
  112.     /*   for arithmetic functions of subsets, see <VDmath.h>  */
  113.  
  114. /**************** One-Dimensional Vector Operations ***********************/
  115.  
  116. double     __vf  VD_max( dVector X, ui size );
  117. double     __vf  VD_min( dVector X, ui size );
  118. double     __vf  VD_absmax( dVector X, ui size );
  119. double     __vf  VD_absmin( dVector X, ui size );
  120. int        __vf  VD_maxexp( dVector X, ui size );
  121. int        __vf  VD_minexp( dVector X, ui size );
  122. double     __vf  VD_maxind( ui _VFAR *Ind, dVector X, ui size );
  123. double     __vf  VD_minind( ui _VFAR *Ind, dVector X, ui size );
  124. double     __vf  VD_absmaxind( ui _VFAR *Ind, dVector X, ui size );
  125. double     __vf  VD_absminind( ui _VFAR *Ind, dVector X, ui size );
  126. ui         __vf  VD_localmaxima( uiVector Ind, dVector X, ui size );
  127. ui         __vf  VD_localminima( uiVector Ind, dVector X, ui size );
  128. void       __vf  VD_runmax( dVector Y, dVector X, ui size );
  129. void       __vf  VD_runmin( dVector Y, dVector X, ui size );
  130. double     __vf  VD_sum( dVector X, ui size );
  131. double     __vf  VD_prod( dVector X, ui size );
  132. void       __vf  VD_runsum( dVector Y, dVector X, ui size );
  133. void       __vf  VD_runprod( dVector Y, dVector X, ui size );
  134. int        __vf  VD_iselementC( dVector Tab, ui size, double C );
  135. ui         __vf  VD_iselementV( dVector Y, dVector X, ui sizex,
  136.                                 dVector Tab, ui sizetab );
  137.  
  138. /**************** Statistical Functions and Building Blocks *************/
  139.  
  140. double  __vf  VD_sumabs( dVector X, ui size );
  141. double  __vf  VD_mean( dVector X, ui size );
  142. double  __vf  VD_meanwW( dVector X, dVector Wt, ui size );
  143. double  __vf  VD_meanabs( dVector X, ui size );
  144. double  __vf  VD_selected_mean( ui _VFAR *nsel, dVector X, ui size,
  145.                  double XMin, double XMax ); /* takes only x with Min<=x<=Max */
  146. double  __vf  VD_median( dVector X, ui size );
  147. double  __vf  VD_sumdevC( dVector X, ui size, double C );
  148. double  __vf  VD_sumdevV( dVector X, dVector Y, ui size );
  149. double  __vf  VD_avdevC( dVector X, ui size, double C );
  150. double  __vf  VD_avdevV( dVector X, dVector Y, ui size );
  151. double  __vf  VD_ssq( dVector X, ui size );  /* sum-of-squares */
  152. double  __vf  VD_rms( dVector X, ui size );  /* root of the mean square */
  153. double  __vf  VD_ssqdevC( dVector X, ui size, double C );
  154. double  __vf  VD_ssqdevV( dVector X, dVector Y, ui size );
  155. double  __vf  VD_meanvar( double _VFAR *Var, dVector X, ui size );
  156. double  __vf  VD_meanvarwW( double _VFAR *Var, dVector X, dVector Wt, ui size );
  157. double  __vf  VD_varianceC( dVector X, ui size, double C );
  158. double  __vf  VD_varianceV( dVector X, dVector Y, ui size );
  159. double  __vf  VD_varianceCwW( dVector X, dVector Wt, ui size, double C );
  160. double  __vf  VD_varianceVwW( dVector X, dVector Y, dVector Wt, ui size );
  161. double  __vf  VD_chi2( dVector X, dVector Y, dVector InvVar, ui size );
  162. double  __vf  VD_chiabs( dVector X, dVector Y, dVector Wt, ui size );
  163. double  __vf  VD_corrcoeff( dVector X, dVector Y, ui size,
  164.                             double Xmean, double Ymean );
  165. ui    __vf  VD_distribution( uiVector Abund, dVector Limits, ui nbins,
  166.                              dVector X, ui sizex, int mode );
  167.  
  168. void  __vf  VD_linregress( dVector Param, dVector X, dVector Y, ui size );
  169. void  __vf  VD_linregresswW( dVector Param, dVector X, dVector Y,
  170.                              dVector InvVar, ui size );
  171.      /* more linear and nonlinear data fitting routines need MatrixLib
  172.         and are declared in <MDstd.h> !                                */
  173.  
  174.  
  175. /*********  Fourier Transfor